x86/domctl: Fix migration of guests which are not using xsave
authorAndrew Cooper <andrew.cooper3@citrix.com>
Mon, 12 Sep 2016 09:30:00 +0000 (10:30 +0100)
committerAndrew Cooper <andrew.cooper3@citrix.com>
Tue, 13 Sep 2016 09:44:04 +0000 (10:44 +0100)
commit681aea049c4a83bb847918003dc2ae21c1156ddb
tree5390940de2daa2ce9b5ce46cf6ae79b7da1f81e8
parent40db977eea1e57fc33cd478d60678c71b4328eb0
x86/domctl: Fix migration of guests which are not using xsave

c/s da62246e "x86/xsaves: enable xsaves/xrstors/xsavec in xen" broke migration
of PV guests which were not using xsave.

In such a case, compress_xsave_states() gets passed a zero length buffer.  The
first thing it tries to do is ASSERT() on user-provided data, if it hadn't
already wandered off the end of the buffer to do so.

Perform more verification of the input buffer before passing it to
compress_xsave_states().  This involves making xsave_area_compressed() public.

Similar problems exist on the HVM side, so make equivalent adjustments there.
This doesn't manifest in general, as hvm_save_cpu_xsave_states() elides the
entire record if xsave isn't used, but is a problem if a caller were to
construct an xsave record manually.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Jan Beulich <JBeulich@suse.com>
xen/arch/x86/domctl.c
xen/arch/x86/hvm/hvm.c
xen/arch/x86/xstate.c
xen/include/asm-x86/xstate.h